﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class CacheManager
{
    // 定义一个静态属性获取文件中的信息
	public static string Message
    {
        get
        {
            // 不在页面上面编程的时候,通过 HttpContext 
            HttpContext context = HttpContext.Current;

            // 首先从缓存中获取
            string message = context.Cache["Message"] as string;

			// 如果缓存中没有数据
            if (message == null)
            {
                string path = context.Server.MapPath("~/TextFile.txt");
                // 从外部的文件中获取信息
                message = System.IO.File.ReadAllText( path );

                // 为了以后的访问,将信息保存到缓存中，设置相对过期时间为 1 小时
                context.Cache.Add(
                    "Message",
                    message,
                    new System.Web.Caching.CacheDependency( path ),
                    System.Web.Caching.Cache.NoAbsoluteExpiration,
                    new TimeSpan(1, 0, 0),
                     System.Web.Caching.CacheItemPriority.Normal,
                     Callback);
            }
            return message;
        }
    }

    private static void Callback(
        string key,
        Object value,
        System.Web.Caching.CacheItemRemovedReason reason    // 原因
        )
    {
        // 但是,需要注意的是,此时不一定有请求
        // 因此,不能使用 HttpContext

        // 如果需要使用 Cache 
        // 可以通过 System.Web.HttpRuntime.Cache 来获取当前网站应用程序的 Cache
    }
}
